//
//  TTCoreGeometry.h
//  Tint
//
//  Created by Kevin Wu on 2/22/12.
//  Copyright (c) 2012 Telligenty. All rights reserved.
//

#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>


/*
 * Angle
 */
CGFloat TTDegreesToRadians(CGFloat degrees);
CGFloat TTRadiansToDegrees(CGFloat radians);

/*
 * Point
 */
CGPoint TTPointMake(CGFloat x, CGFloat y);
CGPoint TTPointZero(void);
CGPoint TTPointSame(CGFloat x);

CGPoint TTPointSetX(CGPoint point, CGFloat x);
CGPoint TTPointSetY(CGPoint point, CGFloat y);

BOOL TTIsPointEqualToPoint(CGPoint point1, CGPoint point2);

/*
 * Size
 */
CGSize TTSizeMake(CGFloat width, CGFloat height);
CGSize TTSizeZero(void);
CGSize TTSizeSquare(CGFloat width);

CGSize TTSizeSetWidth(CGSize size, CGFloat width);
CGSize TTSizeSetHeight(CGSize size, CGFloat height);

CGSize TTSizeToFitSize(CGSize bounds, CGSize size);

BOOL TTIsSizeEqualToSize(CGSize size1, CGSize size2);

/*
 * Rect
 */
CGRect TTRectMake(CGFloat x, CGFloat y, CGFloat width, CGFloat height);
CGRect TTRectZero(void);
CGRect TTRectNull(void);
CGRect TTRectInfinite(void);
CGRect TTRectWithSize(CGSize size);
CGRect TTRectWithWH(CGFloat width, CGFloat height);
CGRect TTRectWithW(CGFloat width);

CGRect TTRectSetX(CGRect rect, CGFloat x);
CGRect TTRectSetY(CGRect rect, CGFloat y);
CGRect TTRectSetWidth(CGRect rect, CGFloat width);
CGRect TTRectSetHeight(CGRect rect, CGFloat height);
CGRect TTRectSetOrigin(CGRect rect, CGPoint point);
CGRect TTRectSetSize(CGRect rect, CGSize size);

CGFloat TTRectGetWidth(CGRect rect);
CGFloat TTRectGetHeight(CGRect rect);
CGFloat TTRectGetLeftX(CGRect rect);
CGFloat TTRectGetCenterX(CGRect rect);
CGFloat TTRectGetRightX(CGRect rect);
CGFloat TTRectGetTopY(CGRect rect);
CGFloat TTRectGetCenterY(CGRect rect);
CGFloat TTRectGetBottomY(CGRect rect);

CGRect TTRectContract(CGRect rect, CGFloat dx, CGFloat dy); // (x,y,w-dx,h-dy)
CGRect TTRectShift(CGRect rect, CGFloat dx, CGFloat dy); // (x+dx,y+dy,w-dx,h-dy)
CGRect TTRectClearCoords(CGRect rect); // (0,0,w,h)
CGRect TTRectStandardize(CGRect rect);
CGRect TTRectInset(CGRect rect, CGFloat dx, CGFloat dy);
CGRect TTRectIntegral(CGRect rect);
CGRect TTRectUnion(CGRect rect1, CGRect rect2);
CGRect TTRectIntersection(CGRect rect1, CGRect rect2);
CGRect TTRectOffset(CGRect rect, CGFloat dx, CGFloat dy);

void TTRectDivide(CGRect rect, CGRect *slice, CGRect *remainder, CGFloat amount, CGRectEdge edge);

BOOL TTIsRectEqualToRect(CGRect rect1, CGRect rect2);
BOOL TTIsRectEmpty(CGRect rect);
BOOL TTIsRectNull(CGRect rect);
BOOL TTIsRectInfinite(CGRect rect);
BOOL TTIsRectContainsPoint(CGRect rect, CGPoint point);
BOOL TTIsRectContainsRect(CGRect rect1, CGRect rect2);
BOOL TTIsRectIntersectsRect(CGRect rect1, CGRect rect2);
